import { inferenceApi } from './inference'

/**
 * 获取资源监控数据
 * @returns {Promise} 返回资源监控数据
 */
export const fetchResourceMonitorData = async () => {
  try {
    // 获取 GPU 显存使用情况
    const gpuResponse = await inferenceApi.getGPUStatusInfo()
    // 获取 CPU 利用率和内存使用情况
    const cpuResponse = await inferenceApi.getCPUStatusInfo()
    // 获取网络带宽情况
    const networkResponse = await inferenceApi.getNetworkStatusInfo()
    
    console.log('原始 GPU 响应:', gpuResponse)
    console.log('原始网络响应:', networkResponse)
    
    // 从嵌套结构中提取实际数据
    const gpuData = gpuResponse.data?.data || gpuResponse.data
    const networkData = networkResponse.data?.data || networkResponse.data
    
    console.log('提取后 GPU 数据:', gpuData)
    console.log('提取后网络数据:', networkData)
    
    // 使用处理函数处理返回的数据
    const processedGPUData = processGPUData(gpuData)
    const processedNetworkData = processNetworkData(networkData)
    
    return {
      gpuUsageData: processedGPUData,
      networkDelayData: processedNetworkData
    }
  } catch (error) {
    console.error('获取资源监控数据失败:', error)
    throw error
  }
}

/**
 * 处理 GPU 数据
 * @param {Object|Array} data - GPU 数据
 * @returns {Object} 处理后的 GPU 数据
 */
const processGPUData = (data) => {
  // 防止未定义的数据导致错误
  if (!data) {
    console.warn('GPU 数据为空')
    return {
      edge1: [0, 0, 0, 0, 0],
      edge2: [0, 0, 0, 0, 0],
      cloud: [0, 0, 0, 0, 0]
    }
  }
  
  try {
    // 后端直接返回了完整格式的数据
    if (data.edge1 && Array.isArray(data.edge1) && data.edge1.length === 5 &&
        data.edge2 && Array.isArray(data.edge2) && data.edge2.length === 5 &&
        data.cloud && Array.isArray(data.cloud) && data.cloud.length === 5) {
      console.log('使用后端完整数据格式')
      return {
        edge1: data.edge1,
        edge2: data.edge2,
        cloud: data.cloud
      }
    }
    
    // 如果数据是数组格式 
    if (Array.isArray(data)) {
      return {
        edge1: [data[0] || 0, 0, 0, 0, 0],
        edge2: [data[1] || 0, 0, 0, 0, 0],
        cloud: [data[2] || 0, 0, 0, 0, 0]
      }
    }
    
    // 如果数据已经是对象结构，但嵌套格式可能不同
    // 尝试处理多种可能的结构
    return {
      edge1: [
        typeof data.edge1 === 'number' ? data.edge1 : 
        data.edge1?.usage || data.edge1?.value || 
        (Array.isArray(data.edge1) ? data.edge1[0] : 0), 
        0, 0, 0, 0
      ],
      edge2: [
        typeof data.edge2 === 'number' ? data.edge2 : 
        data.edge2?.usage || data.edge2?.value || 
        (Array.isArray(data.edge2) ? data.edge2[0] : 0), 
        0, 0, 0, 0
      ],
      cloud: [
        typeof data.cloud === 'number' ? data.cloud : 
        data.cloud?.usage || data.cloud?.value || 
        (Array.isArray(data.cloud) ? data.cloud[0] : 0), 
        0, 0, 0, 0
      ]
    }
  } catch (e) {
    console.error('处理 GPU 数据时出错:', e, data)
    return {
      edge1: [0, 0, 0, 0, 0],
      edge2: [0, 0, 0, 0, 0],
      cloud: [0, 0, 0, 0, 0]
    }
  }
}

/**
 * 处理网络数据
 * @param {Object|Array} data - 网络数据
 * @returns {Object} 处理后的网络数据
 */
const processNetworkData = (data) => {
  // 防止未定义的数据导致错误
  if (!data) {
    console.warn('网络数据为空')
    return {
      edge1: [0, 0, 0, 0, 0],
      edge2: [0, 0, 0, 0, 0]
    }
  }
  
  try {
    // 后端直接返回了完整格式的数据
    if (data.edge1 && Array.isArray(data.edge1) && data.edge1.length === 5 &&
        data.edge2 && Array.isArray(data.edge2) && data.edge2.length === 5) {
      console.log('使用后端完整网络数据格式')
      return {
        edge1: data.edge1,
        edge2: data.edge2
      }
    }
    
    // 如果数据是数组格式
    if (Array.isArray(data)) {
      return {
        edge1: [data[0] || 0, 0, 0, 0, 0],
        edge2: [data[1] || 0, 0, 0, 0, 0]
      }
    }
    
    // 如果数据已经是对象结构，但嵌套格式可能不同
    // 尝试处理多种可能的结构
    return {
      edge1: [
        typeof data.edge1 === 'number' ? data.edge1 : 
        data.edge1?.delay || data.edge1?.value || 
        (Array.isArray(data.edge1) ? data.edge1[0] : 0), 
        0, 0, 0, 0
      ],
      edge2: [
        typeof data.edge2 === 'number' ? data.edge2 : 
        data.edge2?.delay || data.edge2?.value || 
        (Array.isArray(data.edge2) ? data.edge2[0] : 0), 
        0, 0, 0, 0
      ]
    }
  } catch (e) {
    console.error('处理网络数据时出错:', e, data)
    return {
      edge1: [0, 0, 0, 0, 0],
      edge2: [0, 0, 0, 0, 0]
    }
  }
} 